/************************************
 * Package: RGcpp					*
 * Authors: Rui Eduardo Gouveia Gil	*
 * Date: 2010						*
 ************************************/
#ifndef __RGCPP_TYPES_H__
#define __RGCPP_TYPES_H__

namespace rgcpp
{

template <class Type1=void,class Type2=void,class Type3=void,class Type4=void,class Type5=void,class Type6=void,class Type7=void,class Type8=void,class Type9=void,class Type10=void,class Type11=void,class Type12=void,class Type13=void,class Type14=void,class Type15=void,class Type16=void,class Type17=void,class Type18=void,class Type19=void,class Type20=void>
class Types
{
	public:
		Type1 t1;
		Type2 t2;
		Type3 t3;
		Type4 t4;
		Type5 t5;
		Type6 t6;
		Type7 t7;
		Type8 t8;
		Type9 t9;
		Type10 t10;
		Type11 t11;
		Type12 t12;
		Type13 t13;
		Type14 t14;
		Type15 t15;
		Type16 t16;
		Type17 t17;
		Type18 t18;
		Type19 t19;
		Type20 t20;

	public:
		Types()
		{
		}

		Types(Type1 t1, Type2 t2, Type3 t3, Type4 t4, Type5 t5, Type6 t6, Type7 t7, Type8 t8, Type9 t9, Type10 t10, Type11 t11, Type12 t12, Type13 t13, Type14 t14, Type15 t15, Type16 t16, Type17 t17, Type18 t18, Type19 t19, Type20 t20)
		{
			this->t1=t1;
			this->t2=t2;
			this->t3=t3;
			this->t4=t4;
			this->t5=t5;
			this->t6=t6;
			this->t7=t7;
			this->t8=t8;
			this->t9=t9;
			this->t10=t10;
			this->t11=t11;
			this->t12=t12;
			this->t13=t13;
			this->t14=t14;
			this->t15=t15;
			this->t16=t16;
			this->t17=t17;
			this->t18=t18;
			this->t19=t19;
			this->t20=t20;
		}

		~Types()
		{

		}
};

template <class Type1,class Type2,class Type3,class Type4,class Type5,class Type6,class Type7,class Type8,class Type9,class Type10,class Type11,class Type12,class Type13,class Type14,class Type15,class Type16,class Type17,class Type18,class Type19>
class Types <Type1,Type2,Type3,Type4,Type5,Type6,Type7,Type8,Type9,Type10,Type11,Type12,Type13,Type14,Type15,Type16,Type17,Type18,Type19>
{
	public:
		Type1 t1;
		Type2 t2;
		Type3 t3;
		Type4 t4;
		Type5 t5;
		Type6 t6;
		Type7 t7;
		Type8 t8;
		Type9 t9;
		Type10 t10;
		Type11 t11;
		Type12 t12;
		Type13 t13;
		Type14 t14;
		Type15 t15;
		Type16 t16;
		Type17 t17;
		Type18 t18;
		Type19 t19;

	public:
		Types()
		{
		}

		Types(Type1 t1, Type2 t2, Type3 t3, Type4 t4, Type5 t5, Type6 t6, Type7 t7, Type8 t8, Type9 t9, Type10 t10, Type11 t11, Type12 t12, Type13 t13, Type14 t14, Type15 t15, Type16 t16, Type17 t17, Type18 t18, Type19 t19)
		{
			this->t1=t1;
			this->t2=t2;
			this->t3=t3;
			this->t4=t4;
			this->t5=t5;
			this->t6=t6;
			this->t7=t7;
			this->t8=t8;
			this->t9=t9;
			this->t10=t10;
			this->t11=t11;
			this->t12=t12;
			this->t13=t13;
			this->t14=t14;
			this->t15=t15;
			this->t16=t16;
			this->t17=t17;
			this->t18=t18;
			this->t19=t19;
		}

		~Types()
		{

		}
};

template <class Type1,class Type2,class Type3,class Type4,class Type5,class Type6,class Type7,class Type8,class Type9,class Type10,class Type11,class Type12,class Type13,class Type14,class Type15,class Type16,class Type17,class Type18>
class Types <Type1,Type2,Type3,Type4,Type5,Type6,Type7,Type8,Type9,Type10,Type11,Type12,Type13,Type14,Type15,Type16,Type17,Type18>
{
	public:
		Type1 t1;
		Type2 t2;
		Type3 t3;
		Type4 t4;
		Type5 t5;
		Type6 t6;
		Type7 t7;
		Type8 t8;
		Type9 t9;
		Type10 t10;
		Type11 t11;
		Type12 t12;
		Type13 t13;
		Type14 t14;
		Type15 t15;
		Type16 t16;
		Type17 t17;
		Type18 t18;

	public:
		Types()
		{
		}

		Types(Type1 t1, Type2 t2, Type3 t3, Type4 t4, Type5 t5, Type6 t6, Type7 t7, Type8 t8, Type9 t9, Type10 t10, Type11 t11, Type12 t12, Type13 t13, Type14 t14, Type15 t15, Type16 t16, Type17 t17, Type18 t18)
		{
			this->t1=t1;
			this->t2=t2;
			this->t3=t3;
			this->t4=t4;
			this->t5=t5;
			this->t6=t6;
			this->t7=t7;
			this->t8=t8;
			this->t9=t9;
			this->t10=t10;
			this->t11=t11;
			this->t12=t12;
			this->t13=t13;
			this->t14=t14;
			this->t15=t15;
			this->t16=t16;
			this->t17=t17;
			this->t18=t18;
		}

		~Types()
		{

		}
};

template <class Type1,class Type2,class Type3,class Type4,class Type5,class Type6,class Type7,class Type8,class Type9,class Type10,class Type11,class Type12,class Type13,class Type14,class Type15,class Type16,class Type17>
class Types <Type1,Type2,Type3,Type4,Type5,Type6,Type7,Type8,Type9,Type10,Type11,Type12,Type13,Type14,Type15,Type16,Type17>
{
	public:
		Type1 t1;
		Type2 t2;
		Type3 t3;
		Type4 t4;
		Type5 t5;
		Type6 t6;
		Type7 t7;
		Type8 t8;
		Type9 t9;
		Type10 t10;
		Type11 t11;
		Type12 t12;
		Type13 t13;
		Type14 t14;
		Type15 t15;
		Type16 t16;
		Type17 t17;

	public:
		Types()
		{
		}

		Types(Type1 t1, Type2 t2, Type3 t3, Type4 t4, Type5 t5, Type6 t6, Type7 t7, Type8 t8, Type9 t9, Type10 t10, Type11 t11, Type12 t12, Type13 t13, Type14 t14, Type15 t15, Type16 t16, Type17 t17)
		{
			this->t1=t1;
			this->t2=t2;
			this->t3=t3;
			this->t4=t4;
			this->t5=t5;
			this->t6=t6;
			this->t7=t7;
			this->t8=t8;
			this->t9=t9;
			this->t10=t10;
			this->t11=t11;
			this->t12=t12;
			this->t13=t13;
			this->t14=t14;
			this->t15=t15;
			this->t16=t16;
			this->t17=t17;
		}

		~Types()
		{

		}
};

template <class Type1,class Type2,class Type3,class Type4,class Type5,class Type6,class Type7,class Type8,class Type9,class Type10,class Type11,class Type12,class Type13,class Type14,class Type15,class Type16>
class Types <Type1,Type2,Type3,Type4,Type5,Type6,Type7,Type8,Type9,Type10,Type11,Type12,Type13,Type14,Type15,Type16>
{
	public:
		Type1 t1;
		Type2 t2;
		Type3 t3;
		Type4 t4;
		Type5 t5;
		Type6 t6;
		Type7 t7;
		Type8 t8;
		Type9 t9;
		Type10 t10;
		Type11 t11;
		Type12 t12;
		Type13 t13;
		Type14 t14;
		Type15 t15;
		Type15 t16;

	public:
		Types()
		{
		}

		Types(Type1 t1, Type2 t2, Type3 t3, Type4 t4, Type5 t5, Type6 t6, Type7 t7, Type8 t8, Type9 t9, Type10 t10, Type11 t11, Type12 t12, Type13 t13, Type14 t14, Type15 t15, Type16 t16)
		{
			this->t1=t1;
			this->t2=t2;
			this->t3=t3;
			this->t4=t4;
			this->t5=t5;
			this->t6=t6;
			this->t7=t7;
			this->t8=t8;
			this->t9=t9;
			this->t10=t10;
			this->t11=t11;
			this->t12=t12;
			this->t13=t13;
			this->t14=t14;
			this->t15=t15;
			this->t16=t16;
		}

		~Types()
		{

		}
};

template <class Type1,class Type2,class Type3,class Type4,class Type5,class Type6,class Type7,class Type8,class Type9,class Type10,class Type11,class Type12,class Type13,class Type14,class Type15>
class Types <Type1,Type2,Type3,Type4,Type5,Type6,Type7,Type8,Type9,Type10,Type11,Type12,Type13,Type14,Type15>
{
	public:
		Type1 t1;
		Type2 t2;
		Type3 t3;
		Type4 t4;
		Type5 t5;
		Type6 t6;
		Type7 t7;
		Type8 t8;
		Type9 t9;
		Type10 t10;
		Type11 t11;
		Type12 t12;
		Type13 t13;
		Type14 t14;
		Type15 t15;

	public:
		Types()
		{
		}

		Types(Type1 t1, Type2 t2, Type3 t3, Type4 t4, Type5 t5, Type6 t6, Type7 t7, Type8 t8, Type9 t9, Type10 t10, Type11 t11, Type12 t12, Type13 t13, Type14 t14, Type15 t15)
		{
			this->t1=t1;
			this->t2=t2;
			this->t3=t3;
			this->t4=t4;
			this->t5=t5;
			this->t6=t6;
			this->t7=t7;
			this->t8=t8;
			this->t9=t9;
			this->t10=t10;
			this->t11=t11;
			this->t12=t12;
			this->t13=t13;
			this->t14=t14;
			this->t15=t15;
		}

		~Types()
		{

		}
};

template <class Type1,class Type2,class Type3,class Type4,class Type5,class Type6,class Type7,class Type8,class Type9,class Type10,class Type11,class Type12,class Type13,class Type14>
class Types <Type1,Type2,Type3,Type4,Type5,Type6,Type7,Type8,Type9,Type10,Type11,Type12,Type13,Type14>
{
	public:
		Type1 t1;
		Type2 t2;
		Type3 t3;
		Type4 t4;
		Type5 t5;
		Type6 t6;
		Type7 t7;
		Type8 t8;
		Type9 t9;
		Type10 t10;
		Type11 t11;
		Type12 t12;
		Type13 t13;
		Type14 t14;

	public:
		Types()
		{
		}

		Types(Type1 t1, Type2 t2, Type3 t3, Type4 t4, Type5 t5, Type6 t6, Type7 t7, Type8 t8, Type9 t9, Type10 t10, Type11 t11, Type12 t12, Type13 t13, Type14 t14)
		{
			this->t1=t1;
			this->t2=t2;
			this->t3=t3;
			this->t4=t4;
			this->t5=t5;
			this->t6=t6;
			this->t7=t7;
			this->t8=t8;
			this->t9=t9;
			this->t10=t10;
			this->t11=t11;
			this->t12=t12;
			this->t13=t13;
			this->t14=t14;
		}

		~Types()
		{

		}
};

template <class Type1,class Type2,class Type3,class Type4,class Type5,class Type6,class Type7,class Type8,class Type9,class Type10,class Type11,class Type12,class Type13>
class Types <Type1,Type2,Type3,Type4,Type5,Type6,Type7,Type8,Type9,Type10,Type11,Type12,Type13>
{
	public:
		Type1 t1;
		Type2 t2;
		Type3 t3;
		Type4 t4;
		Type5 t5;
		Type6 t6;
		Type7 t7;
		Type8 t8;
		Type9 t9;
		Type10 t10;
		Type11 t11;
		Type12 t12;
		Type13 t13;

	public:
		Types()
		{
		}

		Types(Type1 t1, Type2 t2, Type3 t3, Type4 t4, Type5 t5, Type6 t6, Type7 t7, Type8 t8, Type9 t9, Type10 t10, Type11 t11, Type12 t12, Type13 t13)
		{
			this->t1=t1;
			this->t2=t2;
			this->t3=t3;
			this->t4=t4;
			this->t5=t5;
			this->t6=t6;
			this->t7=t7;
			this->t8=t8;
			this->t9=t9;
			this->t10=t10;
			this->t11=t11;
			this->t12=t12;
			this->t13=t13;
		}

		~Types()
		{

		}
};

template <class Type1,class Type2,class Type3,class Type4,class Type5,class Type6,class Type7,class Type8,class Type9,class Type10,class Type11,class Type12>
class Types <Type1,Type2,Type3,Type4,Type5,Type6,Type7,Type8,Type9,Type10,Type11,Type12>
{
	public:
		Type1 t1;
		Type2 t2;
		Type3 t3;
		Type4 t4;
		Type5 t5;
		Type6 t6;
		Type7 t7;
		Type8 t8;
		Type9 t9;
		Type10 t10;
		Type11 t11;
		Type12 t12;

	public:
		Types()
		{
		}

		Types(Type1 t1, Type2 t2, Type3 t3, Type4 t4, Type5 t5, Type6 t6, Type7 t7, Type8 t8, Type9 t9, Type10 t10, Type11 t11, Type12 t12)
		{
			this->t1=t1;
			this->t2=t2;
			this->t3=t3;
			this->t4=t4;
			this->t5=t5;
			this->t6=t6;
			this->t7=t7;
			this->t8=t8;
			this->t9=t9;
			this->t10=t10;
			this->t11=t11;
			this->t12=t12;
		}

		~Types()
		{

		}
};

template <class Type1,class Type2,class Type3,class Type4,class Type5,class Type6,class Type7,class Type8,class Type9,class Type10,class Type11>
class Types <Type1,Type2,Type3,Type4,Type5,Type6,Type7,Type8,Type9,Type10,Type11>
{
	public:
		Type1 t1;
		Type2 t2;
		Type3 t3;
		Type4 t4;
		Type5 t5;
		Type6 t6;
		Type7 t7;
		Type8 t8;
		Type9 t9;
		Type10 t10;
		Type11 t11;

	public:
		Types()
		{
		}

		Types(Type1 t1, Type2 t2, Type3 t3, Type4 t4, Type5 t5, Type6 t6, Type7 t7, Type8 t8, Type9 t9, Type10 t10, Type11 t11)
		{
			this->t1=t1;
			this->t2=t2;
			this->t3=t3;
			this->t4=t4;
			this->t5=t5;
			this->t6=t6;
			this->t7=t7;
			this->t8=t8;
			this->t9=t9;
			this->t10=t10;
			this->t11=t11;
		}

		~Types()
		{

		}
};

template <class Type1,class Type2,class Type3,class Type4,class Type5,class Type6,class Type7,class Type8,class Type9,class Type10>
class Types <Type1,Type2,Type3,Type4,Type5,Type6,Type7,Type8,Type9,Type10>
{
	public:
		Type1 t1;
		Type2 t2;
		Type3 t3;
		Type4 t4;
		Type5 t5;
		Type6 t6;
		Type7 t7;
		Type8 t8;
		Type9 t9;
		Type10 t10;

	public:
		Types()
		{
		}

		Types(Type1 t1, Type2 t2, Type3 t3, Type4 t4, Type5 t5, Type6 t6, Type7 t7, Type8 t8, Type9 t9, Type10 t10)
		{
			this->t1=t1;
			this->t2=t2;
			this->t3=t3;
			this->t4=t4;
			this->t5=t5;
			this->t6=t6;
			this->t7=t7;
			this->t8=t8;
			this->t9=t9;
			this->t10=t10;
		}

		~Types()
		{

		}
};

template <class Type1,class Type2,class Type3,class Type4,class Type5,class Type6,class Type7,class Type8,class Type9>
class Types <Type1,Type2,Type3,Type4,Type5,Type6,Type7,Type8,Type9>
{
	public:
		Type1 t1;
		Type2 t2;
		Type3 t3;
		Type4 t4;
		Type5 t5;
		Type6 t6;
		Type7 t7;
		Type8 t8;
		Type9 t9;

	public:
		Types()
		{
		}

		Types(Type1 t1, Type2 t2, Type3 t3, Type4 t4, Type5 t5, Type6 t6, Type7 t7, Type8 t8, Type9 t9)
		{
			this->t1=t1;
			this->t2=t2;
			this->t3=t3;
			this->t4=t4;
			this->t5=t5;
			this->t6=t6;
			this->t7=t7;
			this->t8=t8;
			this->t9=t9;
		}

		~Types()
		{

		}
};

template <class Type1,class Type2,class Type3,class Type4,class Type5,class Type6,class Type7,class Type8>
class Types <Type1,Type2,Type3,Type4,Type5,Type6,Type7,Type8>
{
	public:
		Type1 t1;
		Type2 t2;
		Type3 t3;
		Type4 t4;
		Type5 t5;
		Type6 t6;
		Type7 t7;
		Type8 t8;

	public:
		Types()
		{
		}

		Types(Type1 t1, Type2 t2, Type3 t3, Type4 t4, Type5 t5, Type6 t6, Type7 t7, Type8 t8)
		{
			this->t1=t1;
			this->t2=t2;
			this->t3=t3;
			this->t4=t4;
			this->t5=t5;
			this->t6=t6;
			this->t7=t7;
			this->t8=t8;
		}

		~Types()
		{

		}
};

template <class Type1,class Type2,class Type3,class Type4,class Type5,class Type6,class Type7>
class Types <Type1,Type2,Type3,Type4,Type5,Type6,Type7>
{
	public:
		Type1 t1;
		Type2 t2;
		Type3 t3;
		Type4 t4;
		Type5 t5;
		Type6 t6;
		Type7 t7;

	public:
		Types()
		{
		}

		Types(Type1 t1, Type2 t2, Type3 t3, Type4 t4, Type5 t5, Type6 t6, Type7 t7)
		{
			this->t1=t1;
			this->t2=t2;
			this->t3=t3;
			this->t4=t4;
			this->t5=t5;
			this->t6=t6;
			this->t7=t7;
		}

		~Types()
		{

		}
};

template <class Type1,class Type2,class Type3,class Type4,class Type5,class Type6>
class Types <Type1,Type2,Type3,Type4,Type5,Type6>
{
	public:
		Type1 t1;
		Type2 t2;
		Type3 t3;
		Type4 t4;
		Type5 t5;
		Type6 t6;

	public:
		Types()
		{
		}

		Types(Type1 t1, Type2 t2, Type3 t3, Type4 t4, Type5 t5, Type6 t6)
		{
			this->t1=t1;
			this->t2=t2;
			this->t3=t3;
			this->t4=t4;
			this->t5=t5;
			this->t6=t6;
		}

		~Types()
		{

		}
};

template <class Type1,class Type2,class Type3,class Type4,class Type5>
class Types <Type1,Type2,Type3,Type4,Type5>
{
	public:
		Type1 t1;
		Type2 t2;
		Type3 t3;
		Type4 t4;
		Type5 t5;

	public:
		Types()
		{
		}

		Types(Type1 t1, Type2 t2, Type3 t3, Type4 t4, Type5 t5)
		{
			this->t1=t1;
			this->t2=t2;
			this->t3=t3;
			this->t4=t4;
			this->t5=t5;
		}

		~Types()
		{

		}
};

template <class Type1,class Type2,class Type3,class Type4>
class Types <Type1,Type2,Type3,Type4>
{
	public:
		Type1 t1;
		Type2 t2;
		Type3 t3;
		Type4 t4;

	public:
		Types()
		{
		}

		Types(Type1 t1, Type2 t2, Type3 t3, Type4 t4)
		{
			this->t1=t1;
			this->t2=t2;
			this->t3=t3;
			this->t4=t4;
		}

		~Types()
		{

		}
};

template <class Type1,class Type2,class Type3>
class Types <Type1,Type2,Type3>
{
	public:
		Type1 t1;
		Type2 t2;
		Type3 t3;

	public:
		Types()
		{
		}

		Types(Type1 t1, Type2 t2, Type3 t3)
		{
			this->t1=t1;
			this->t2=t2;
			this->t3=t3;
		}

		~Types()
		{

		}
};

template <class Type1,class Type2>
class Types <Type1,Type2>
{
	public:
		Type1 t1;
		Type2 t2;

	public:
		Types()
		{
		}

		Types(Type1 t1, Type2 t2)
		{
			this->t1=t1;
			this->t2=t2;
		}

		~Types()
		{

		}
};

template <class Type1>
class Types <Type1>
{
	public:
		Type1 t1;

	public:
		Types()
		{
		}

		Types(Type1 t1)
		{
			this->t1=t1;
		}

		~Types()
		{

		}
};

template <>
class Types <>
{
	public:
		Types()
		{
		}

		~Types()
		{

		}
};

}

#endif
